package br.com.hs.nfe.common.to;

import br.com.hs.nfe.common.anotation.Node;

/**
 * Classe de informações que representa um item da Nota.
 * @author Ranlive Hrysyk
 */
@Node(id = "H", name = "Itens")
public class ProdutoNotaTO extends BaseTO {

    private ProdutoTO produtoTO;
    private IcmsTO icmsTO;
    private IpiTO ipiTO;
    private IITO iiTO;
    private PisTO pisTO;
    private PisSTTO pisSTTO;
    private CofinsTO cofinsTO;
    private CofinsSTTO cofinsSTTO;
    private IssqnTO issqnTO;
    private String infAdProd;

    /**
     * Produto/Serviço da Nota.
     */
    public ProdutoTO getProduto() {
        return produtoTO;
    }

    /**
     * Informar o produto ou serviço.
     * @param produtoTO Produto/Serviço da Nota.
     */
    public void setProduto(ProdutoTO produtoTO) {
        this.produtoTO = produtoTO;
    }

    /**
     * Grupo de Tributos do ICMS.
     */
    public IcmsTO getICMS() {
        return icmsTO;
    }

    /**
     * Informar o grupo de tributos do ICMS.
     * <p><b>Não informar o campo se o item for sujeito ao ISSQN.</b></p>
     * <p><b>Item sujeito ao ICMS:</b> Informar os grupos ICMS, PIS e COFINS. Os grupos IPI, II, PISST
     * e COFINSST só devem ser informados se existir valor.</b></p>
     * @param icmsTO Grupo de Tributos do ICMS
     */
    public void setICMS(IcmsTO icmsTO) {
        this.icmsTO = icmsTO;
    }

    /**
     * Grupo de Tributos do IPI.
     */
    public IpiTO getIPI() {
        return ipiTO;
    }

    /**
     * Informar o grupo de tributos do IPI.
     * <p><b>Não informmar o campo se o item não for sujeito ao IPI ou for sujeito ao ISSQN.</b></p>
     * @param ipiTO Grupo de Tributos do IPI
     */
    public void setIPI(IpiTO ipiTO) {
        this.ipiTO = ipiTO;
    }

    /**
     * Grupo de Tributos do II.
     */
    public IITO getII() {
        return iiTO;
    }

    /**
     * Informar o grupo de tributos do II.
     * <p><b>Informar apenas quando se tratar de operações de importação, nos demais caos não informar este campo.</b></p>
     * @param iiTO Grupo de Tributos do II
     */
    public void setII(IITO iiTO) {
        this.iiTO = iiTO;
    }

    /**
     * Grupo de Tributos do PIS.
     */
    public PisTO getPIS() {
        return pisTO;
    }

    /**
     * Informar o grupo de tributos do PIS.
     * @param pisTO Grupo de Tributos do PIS
     */
    public void setPIS(PisTO pisTO) {
        this.pisTO = pisTO;
    }

    /**
     * Grupo de Tributos do PIS ST.
     */
    public PisSTTO getPISST() {
        return pisSTTO;
    }

    /**
     * Informar o grupo de tributos do PIS ST.
     * <p><b>Não informar este campo se não existir PIS ST (Substituição Tributária), CST do PIS diferente de 5.</b></p>
     * @param pisSTTO Grupo de Tributos do PIS ST.
     */
    public void setPISST(PisSTTO pisSTTO) {
        this.pisSTTO = pisSTTO;
    }

    /**
     * Grupo de Tributos da COFINS.
     */
    public CofinsTO getCOFINS() {
        return cofinsTO;
    }

    /**
     * Informar o grupo de tributos da COFINS.
     * @param cofinsTO Grupo de Tributos da COFINS
     */
    public void setCOFINS(CofinsTO cofinsTO) {
        this.cofinsTO = cofinsTO;
    }

    /**
     * Grupo de Tributos da COFINS ST.
     */
    public CofinsSTTO getCOFINSST() {
        return cofinsSTTO;
    }

    /**
     * Informar o grupo de tributos da COFINS ST.
     * <p><b>Não informar este campo se não existir COFINS ST (Substituição Tributária), CST do COFINS diferente de 5.</b></p>
     * @param cofinsSTTO Grupo de Tributos da COFINS ST
     */
    public void setCOFINSST(CofinsSTTO cofinsSTTO) {
        this.cofinsSTTO = cofinsSTTO;
    }

    /**
     * Grupo de Tributos do ISSQN.
     */
    public IssqnTO getISSQN() {
        return issqnTO;
    }

    /**
     * Informar o grupo de tributos do ISSQN.
     * <p><b>Não informar este campo se o item for sujeito ao ICMS.</b></p>
     * <p><b>Item sujeito ao ISSQN:</b> Informar os grupos ISSQN, PIS e COFINS. Os grupos demais grupos 
     * não devem ser informados.</b></p>
     * @param issqnTO Grupo de Tributos do ISSQN
     */
    public void setISSQN(IssqnTO issqnTO) {
        this.issqnTO = issqnTO;
    }

    /**
     * Informações adicionais do produto/serviço.
     */
    public String getInformacaoesAdicionais() {
        return infAdProd;
    }

    /**
     * Pode ser utilizado para complementar a descrição e informações adicionais do produto/serviço.
     * @param infAdProd Informações adicionais do produto/serviço.
     */
    public void setInformacoesAdicionais(String infAdProd) {
        this.infAdProd = infAdProd;
    }
}
